#!/usr/bin/env python
# coding: utf-8

# ## Pandas通过索引查找数据

# 内容介绍:索引与python的切片原理相同，生成一个数据视图

# In[1]:


import numpy as np
import pandas as pd


# In[2]:


# 示例数据
s0 = pd.Series(range(5))
print(s0)
s1 = pd.Series(range(5),index=['a','b','c','d','e'])
print(s1)
df0 = pd.DataFrame(np.arange(9).reshape(3,3),index=['a','b','c'],columns=['A','B','C'])
df0


# ### 1.Series查找数据的方式

# In[3]:


# （1）使用位置索引查找数据
s0[1]


# In[4]:


# （2）使用标签索引查找数据
s1['a']


# In[5]:


# （3）切片索引查找数据,基于位置索引的方式
s1[1:3]


# In[6]:


# （4）切片索引查找数据，基于标签切片进行查找
# 标签索引与位置索引不同，前后标签都包含。
# 一般python的索引不包含终止部分。但此处的标签索引不同。
s1['a':'c']


# In[7]:


# （5）不连续索引。双层中括号[]
s1[['a','c']]


# In[8]:


# （6）使用位置索引进行不连续取数
s1[[0,2]]


# In[9]:


# (7)布尔索引。与numpy类似的使用方式
print(s1>1)
s1[s1>1]


# ### 2. DataFrame索引查找数据
# 
# 对于获取的一维数据，返回的是Series数据类型

# In[10]:


# (1)列索引取值
df0['A']


# In[11]:


# (2)列不连续索引取值
df0[['A','C']]


# In[12]:


# (3)获取具体的某个元素。实际上先获取列，之后便是Series获取数据的方式
df0['A'][0]


# In[13]:


# (4)切片的方法。此时，默认获取的是行。
df0[:2]


# ### 3.DataFrame高级索引

# * 3.1 loc标签索引

# In[14]:


#loc索引是基于标签名的索引。自定义的索引名。
s1.loc['a':'c']


# In[15]:


#loc是基于标签的索引。因此内部的都是标签参数。用逗号分隔的分别是行和列。
df0.loc['a':'b','A':'B']


# * 3.2 iloc位置索引

# In[16]:


s1.iloc[0]


# In[17]:


s1.iloc[0:2]


# In[18]:


df0.iloc[0:2,0:2]


# * 3.3 ix标签和位置混合索引
# 
# 在0.20.0开始，.ix索引器已被弃用，赞成更加严格.iloc 和.loc索引

# In[19]:


#如果数据中同时存在自动生成的数字索引及标签，不建议使用这种方式
s1.ix[0:2]


# In[ ]:




